#include "ustandard/ustandard_def.h"
static jmp_buf env;
#if TEST1 /* OK. */
double divide(double to, double by)
{
    if(by == 0)
        longjmp(env, 1);

    return to / by;
}

void f(int n) 
{
    if (setjmp(env) == 0)
        printf("divide return %lf\n", divide(2, n));
    else
        printf("Cannot / 0.\n");

    printf("done.\n");
}


int main_ok1()
{
    int n = 10;

    while(1) {
        printf("n=%d\n", n);

        if (setjmp(env) == 0)
            printf("divide return %lf\n", divide(2, n));
        else
            printf("Cannot / 0.\n");


        printf("done.\n");

        n -- ;
        sleep(1);
    }

    return 0;
}
#endif


#if TEST2 /* OK. */
int main()
{
    int n = 3;
    
    setjmp(env);
    n = 3;
    while(1) {
        uloginf("n=%d\n", n);

        if(n == 0) {
            longjmp(env, 1);
        }

        //printf("done.\n");

        n -- ;
        sleep(1);
    }

    return 0;
}
#endif


#if TEST3 /* OK. */
int kn = 3;
int do_restart()
{
    int ret = 0;
    ret = setjmp(env);
    printf("setjmp return %d\n", ret);
    return 0;
}

int main()
{
    do_restart(); 
    kn = 3;
    while(1) {
        uloginf("n=%d\n", kn);

        if(kn == 0) {
            longjmp(env, 1);
        }

        //printf("done.\n");


        kn -- ;
        sleep(1);
    }

    return 0;
}
#endif


#if TEST4 /* OK. */
int kn = 3;
int do_restart()
{
    int ret = 0;
    ret = setjmp(env);
    printf("setjmp return %d\n", ret);
    return 0;
}


int check_sn()
{
    if(kn == 0) {
        longjmp(env, 1);
    }

    return 0;
}


int main()
{
    do_restart(); 
    kn = 3;
    while(1) {
        uloginf("n=%d\n", kn);

        if(kn == 0) {
            longjmp(env, 1);
        }

        //printf("done.\n");


        kn -- ;
        sleep(1);
    }

    return 0;
}
#endif


#define TEST5 1
#define uloginf1(fmt...)                                                         \
if(NULL != __LOGOUT_INFO) {                                                     \
    snprintf(s_content, 20, fmt);                                      \
    fprintf(stdout,  "%s%s", "", s_content);                   \
}

#if TEST5 /* OK. */
int kn = 3;
int do_restart()
{
    char s_content[20];  s_content[1] = 0;
    int ret = 0;
    ret = setjmp(env);
    uloginf1("setjmp return %d\n", ret);
    return 0;
}


int check_sn()
{
    char s_content[20];  s_content[1] = 0;
    
    if(kn == 0) {
        longjmp(env, 1);
    }

    return 0;
}


int main()
{
    do_restart(); 
    char s_content[20];   s_content[1] = 0;   
    kn = 3;
    while(1) {
        uloginf("n=%d\n", kn);

        if(kn == 0) {
            longjmp(env, 1);
        }

        //printf("done.\n");


        kn -- ;
        sleep(1);
    }

    return 0;
}
#endif










































